////////////////////////////////////////////////////////////////////////////////
// Filename: positioncolorshader.hpp
////////////////////////////////////////////////////////////////////////////////
#ifndef POSITION_COLOR_SHADER_HPP_
#define POSITION_COLOR_SHADER_HPP_

//////////////
// INCLUDES //
//////////////
#include <d3d11.h>
#include <d3dx10math.h>
#include <d3dx11async.h>
#include <fstream>

////////////////////////////////////////////////////////////////////////////////
// Class name: PositionColorShader
////////////////////////////////////////////////////////////////////////////////
namespace miv {
	class PositionColorShader {
	private:
		struct MatrixBufferType {
			D3DXMATRIX world;
			D3DXMATRIX view;
			D3DXMATRIX projection;
		};

	public:
		PositionColorShader();
		~PositionColorShader();

		bool Initialize(ID3D11Device*, HWND);
		void Shutdown();
		bool Render(ID3D11DeviceContext*, int, D3DXMATRIX, D3DXMATRIX, D3DXMATRIX);

	private:
		bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*);
		void ShutdownShader();
		void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*);

		bool SetShaderParameters(ID3D11DeviceContext*, D3DXMATRIX, D3DXMATRIX, D3DXMATRIX);
		void RenderShader(ID3D11DeviceContext*, int);

	private:
		ID3D11VertexShader* m_vertexShader;
		ID3D11PixelShader* m_pixelShader;
		ID3D11InputLayout* m_layout;
		ID3D11Buffer* m_matrixBuffer;
	};
}

#endif
